package com.cnfangmao.masterdata.common.util;

import java.util.Collection;

/**    
 * @description: 字符串工具类   
 * @author:	chenxc   
 * @date:   2020年4月9日 下午11:01:38   
 */
public class StringUtils extends org.apache.commons.lang3.StringUtils{
	
	/** 空字符串 */
	private static final String NULLSTR = "";
	/** 下划线 */
    private static final char SEPARATOR = '_';
    
    /**
     * @description: 获取参数不为空值 
     * @author: chenxc
     * @date: 2020年4月9日 下午11:08:52
     * @param: @param value 要判断的值
     * @param: @param defaultValue 为空时，默认返回的值
     * @param: @return      
     * @return: T      
     * @throws
     */
    public static <T> T nvl(T value, T defaultValue) {
    	return value != null ? value : defaultValue;
	}
    
    /**
     * @description: 判读一个对象是否为空
     * @author: chenxc
     * @date: 2020年4月9日 下午11:16:39
     * @param: @param object
     * @param: @return      
     * @return: boolean      
     * @throws
     */
    public static boolean isNull(Object object) {
		return object == null;
	}
    
    /**
     * @description: 判读一个集合是否为空 
     * @author: chenxc
     * @date: 2020年4月9日 下午11:19:14
     * @param: @param collection
     * @param: @return      
     * @return: boolean      
     * @throws
     */
    public static boolean isEmpty(Collection<?> collection) {
		return isNull(collection) || collection.isEmpty();
	}
    
    /**
     * @description: 判读一个字符串是否为null或是空字符串 
     * @author: chenxc
     * @date: 2020年4月9日 下午11:21:44
     * @param: @param str
     * @param: @return      
     * @return: boolean      
     * @throws
     */
    public static boolean isEmpty(String str) {
		return isNull(str) || NULLSTR.equals(str);
	}
    
    /**
     * @description: 驼峰式命名法 例如：user_name->userName 
     * @author: chenxc
     * @date: 2020年4月9日 下午11:26:12
     * @param: @param str
     * @param: @return      
     * @return: String      
     * @throws
     */
    public static String toCamelCase(String str)
    {
        if (str == null)
        {
            return null;
        }
        str = str.toLowerCase();
        StringBuilder sb = new StringBuilder(str.length());
        boolean upperCase = false;
        for (int i = 0; i < str.length(); i++)
        {
            char c = str.charAt(i);

            if (c == SEPARATOR)
            {
                upperCase = true;
            }
            else if (upperCase)
            {
                sb.append(Character.toUpperCase(c));
                upperCase = false;
            }
            else
            {
                sb.append(c);
            }
        }
        return sb.toString();
    }
}
